/**
 * 常用的验证方法
 */
var dojs = require("dojs");

// ---------------------------------------------------------------
/**
 * 判断值是否为空值
 * 
 * @param data
 *            判断的值
 */
module.exports.isNull = function(data) {
	if (data == undefined || data == null || data.trim().length <= 0)
		return true;

	return false;
};

// 数字系列------------------------------------------------------------------------------
/**
 * 是否带有小数
 * 
 * @param strValue
 */
module.exports.isDecimal = function(strValue) {
	var regx = /^\d+\.\d+$/;
	return regx.test(strValue);
};
/*******************************************************************************
 * 判断是否为数字
 ******************************************************************************/
module.exports.isNum = function(numValue) {
	var numPattern = /^\d*$/; // 数字的正则表达式
	return numPattern.test(numValue);
};
/*******************************************************************************
 * 判断是否为整数
 ******************************************************************************/
module.exports.isInt = function(intValue) {
	var intPattern = /^0$|^[1-9]\d*$/; // 整数的正则表达式
	return intPattern.test(intValue);
};
/**
 * 只能输入最多有两位小数的数字
 * 
 */
module.exports.twoDeciamlPlacesAtMost = function(strValue) {
	var regx = /^\d*(?:\.\d{0,2})?$/;
	if (strValue.search(regx) == -1) {
		return false;
	}
	return true;
};
// 字母和汉字系列--------------------------------------------------------------------
/**
 * 校验是否中文名称组成
 * 
 * @param str
 */
module.exports.isChinaComplete = function(str) {
	var regx = /^[\u4E00-\u9FA5]{2,4}$/; /* 定义验证表达式 */
	return regx.test(str); /* 进行验证 */
};

/**
 * * 判断是否是汉字
 * 
 * @param charValue
 *            要验证的数据
 * @returns 匹配返回true 不匹配返回false
 */
module.exports.isCharacter = function(charValue) {
	var reg = /^[\u4e00-\u9fa5]{0,}$/;// 是否为汉字
	return reg.test(charValue);
};
/**
 * 是否为字母:true:是，false:不是
 */
function isChar(charValue) {
	var charPattern = /^[a-zA-Z]*$/;// 是否为字母
	return charPattern.test(charValue);
};
/**
 * 是否为字母和数字
 */
function isCharNum(flagValue) {
	var flagPattern = /^[a-zA-Z0-9]*$/; // 是否为字母和数字
	return flagPattern.test(flagValue);
};
// 格式系列-----------------------------------------------------------------------------
/**
 * 校验电话码格式，备用
 * 
 * @param sttr
 */
module.exports.isTeleNumber = function(str) {
	var regx = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
	return regx.test(str);
};
/**
 * 手机和固话号码格式检测
 * @param str  电话号码
 */
module.exports.isPhoneAndTeleNumber = function(phone) {

	var regxPhone = /^((13[0-9])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/;
	var regxTele = /^[0]\d{2,3}-\d{7,8}$/;
	return regxPhone.test(phone) || regxTele.test(phone);
};

/* 校验邮件地址是否合法 */

module.exports.isEmail = function(email) {
	var regx = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
	return regx.test(email);
};
// 密码系列-----------------------------------------------------------------------------
/**
 * 密码采用数字、字母且长度为8-20位
 */
module.exports.validatePwd = function(pwd) {
	var regxDecial = /^.*?[\d]+.*$/;
	var regxLetter = /^.*?[A-Za-z]/;
	var regxSpecialLetter = /^.*?[~/`!@#$%^&*()_+|{}?;:><\-\]\\[\/].*$/;
	var regxLength = /^.{8,20}$/;
	if (regxDecial.test(pwd) && regxLetter.test(pwd) && regxLength.test(pwd)) {
		return true;
	}
	return false;
};
// 身份证系列--------------------------------------------------------------
/**
 * 检验18位身份证号码
 * 
 */
module.exports.validateIdCard = function(cid) {
	var arrExp = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];// 加权因子
	var arrValid = [ 1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2 ];// 校验码
	var reg = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
	if (reg.test(cid)) {
		var sum = 0, idx;
		for (var i = 0; i < cid.length - 1; i++) {
			// 对前17位数字与权值乘积求和
			sum += parseInt(cid.substr(i, 1), 10) * arrExp[i];
		}
		// 计算模（固定算法） 
		idx = sum % 11;
		// 检验第18为是否与校验码相等 
		return arrValid[idx] == cid.substr(17, 1).toUpperCase();
	} else {
		return false;
	}
};
/**
 * 验证15位数身份证号码中的生日是否是有效生日
 **/
module.exports.validityBrithBy15IdCard = function(idCard15) {
	var year = idCard15.substring(6, 8);
	var month = idCard15.substring(8, 10);
	var day = idCard15.substring(10, 12);
	var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
	// 这里用getFullYear()获取年份，避免千年虫问题
	if (temp_date.getYear() != parseFloat(year)
			|| temp_date.getMonth() != parseFloat(month) - 1
			|| temp_date.getDate() != parseFloat(day)) {
		return false;
	} else {
		return true;
	}
};
/**
 * 验证18位数身份证号码中的生日是否是有效生日
 **/
module.exports.validityBrithBy18IdCard = function(idCard18) {
	var year = idCard18.substring(6, 10);
	var month = idCard18.substring(10, 12);
	var day = idCard18.substring(12, 14);
	var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
	// 这里用getFullYear()获取年份，避免千年虫问题
	if (temp_date.getFullYear() != parseFloat(year)
			|| temp_date.getMonth() != parseFloat(month) - 1
			|| temp_date.getDate() != parseFloat(day)) {
		return false;
	} else {
		return true;
	}
};